import pandas as pd
import numpy as np
import pickle
import dalex as dx
np.random.seed = 42
X_test = pd.read_csv("../data/X_test_chosen_ones.csv").drop(['Unnamed: 0', 'test set id'], axis=1)
y_test = pd.read_csv("../data/y_test_chosen_ones.csv").drop(['Unnamed: 0', 'test set id'], axis=1)
observations_info = pd.read_csv("../data/chosen_obserwations_basic.csv").drop('Unnamed: 0', axis=1)
gbm = pickle.load(open("../models/gbm.pickle", 'rb'))
svm = pickle.load(open("../models/svm.pickle", 'rb'))
rfc = pickle.load(open("../models/rfc.pickle", 'rb'))
gbc = pickle.load(open("../models/gbc.pickle", 'rb'))
explainer_gbm = dx.Explainer(gbm, X_test, y_test, label = "XGBoost")
explainer_svm = dx.Explainer(svm, X_test, y_test, label = "Support Vector Machine")
explainer_rfc = dx.Explainer(rfc, X_test, y_test, label = "Random Forest")
explainer_gbc = dx.Explainer(gbc, X_test, y_test, label = "Gradient Boosting")
Preparation of a new explainer is initiated -> data : 16 rows 11 cols -> target variable : Parameter 'y' was a pandas.DataFrame. Converted to a numpy.ndarray. -> target variable : 16 values -> model_class : sklearn.model_selection._search.RandomizedSearchCV (default) -> label : XGBoost -> predict function : <function yhat_proba_default at 0x000001A42DDCE790> will be used (default) -> predict function : Accepts pandas.DataFrame and numpy.ndarray. -> predicted values : min = 0.151, mean = 0.565, max = 0.923 -> model type : classification will be used (default) -> residual function : difference between y and yhat (default) -> residuals : min = -0.894, mean = -0.0651, max = 0.849 -> model_info : package sklearn A new explainer has been created! Preparation of a new explainer is initiated -> data : 16 rows 11 cols -> target variable : Parameter 'y' was a pandas.DataFrame. Converted to a numpy.ndarray. -> target variable : 16 values -> model_class : sklearn.model_selection._search.GridSearchCV (default) -> label : Support Vector Machine -> predict function : <function yhat_default at 0x000001A42DDCE700> will be used (default) -> predict function : Accepts pandas.DataFrame and numpy.ndarray. -> predicted values : min = 0.0, mean = 0.5, max = 1.0 -> model type : classification will be used (default) -> residual function : difference between y and yhat (default) -> residuals : min = -1.0, mean = 0.0, max = 1.0 -> model_info : package sklearn A new explainer has been created! Preparation of a new explainer is initiated -> data : 16 rows 11 cols -> target variable : Parameter 'y' was a pandas.DataFrame. Converted to a numpy.ndarray. -> target variable : 16 values -> model_class : sklearn.model_selection._search.RandomizedSearchCV (default) -> label : Random Forest -> predict function : <function yhat_proba_default at 0x000001A42DDCE790> will be used (default) -> predict function : Accepts pandas.DataFrame and numpy.ndarray. -> predicted values : min = 0.246, mean = 0.551, max = 0.898 -> model type : classification will be used (default) -> residual function : difference between y and yhat (default) -> residuals : min = -0.848, mean = -0.0505, max = 0.754 -> model_info : package sklearn A new explainer has been created! Preparation of a new explainer is initiated -> data : 16 rows 11 cols -> target variable : Parameter 'y' was a pandas.DataFrame. Converted to a numpy.ndarray. -> target variable : 16 values -> model_class : sklearn.model_selection._search.GridSearchCV (default) -> label : Gradient Boosting -> predict function : <function yhat_proba_default at 0x000001A42DDCE790> will be used (default) -> predict function : Accepts pandas.DataFrame and numpy.ndarray. -> predicted values : min = 0.0168, mean = 0.51, max = 0.962 -> model type : classification will be used (default) -> residual function : difference between y and yhat (default) -> residuals : min = -0.93, mean = -0.00993, max = 0.983 -> model_info : package sklearn A new explainer has been created!
for row in range(16):
print(observations_info.iloc[row]["details"])
pp_cp_gbm = explainer_gbm.predict_profile(X_test.iloc[row,:])
pp_cp_gbm.plot()
Calculating ceteris paribus: 0%| | 0/11 [00:00<?, ?it/s]
all TP #1
Calculating ceteris paribus: 100%|████████████████████████████████████████████████████| 11/11 [00:00<00:00, 186.96it/s]
Calculating ceteris paribus: 100%|████████████████████████████████████████████████████| 11/11 [00:00<00:00, 159.82it/s]
all TP #2
Calculating ceteris paribus: 100%|████████████████████████████████████████████████████| 11/11 [00:00<00:00, 129.10it/s]
all TP #3
Calculating ceteris paribus: 100%|████████████████████████████████████████████████████| 11/11 [00:00<00:00, 175.06it/s]
all TN #1
Calculating ceteris paribus: 100%|████████████████████████████████████████████████████| 11/11 [00:00<00:00, 186.15it/s]
all TN #2
Calculating ceteris paribus: 100%|████████████████████████████████████████████████████| 11/11 [00:00<00:00, 169.68it/s]
all TN #3
Calculating ceteris paribus: 100%|████████████████████████████████████████████████████| 11/11 [00:00<00:00, 186.55it/s]
all FN #1
Calculating ceteris paribus: 100%|████████████████████████████████████████████████████| 11/11 [00:00<00:00, 168.77it/s]
all FN #2
Calculating ceteris paribus: 100%|████████████████████████████████████████████████████| 11/11 [00:00<00:00, 178.40it/s]
all FP #1
Calculating ceteris paribus: 100%|████████████████████████████████████████████████████| 11/11 [00:00<00:00, 177.97it/s]
all FP #2
Calculating ceteris paribus: 100%|████████████████████████████████████████████████████| 11/11 [00:00<00:00, 175.07it/s]
XGBoost TP, others FN
Calculating ceteris paribus: 100%|████████████████████████████████████████████████████| 11/11 [00:00<00:00, 172.34it/s]
XGBoost TN, others FP
Calculating ceteris paribus: 100%|████████████████████████████████████████████████████| 11/11 [00:00<00:00, 177.90it/s]
SVM TP, others FN
Calculating ceteris paribus: 100%|████████████████████████████████████████████████████| 11/11 [00:00<00:00, 189.20it/s]
SVM TN, others FP
Calculating ceteris paribus: 100%|████████████████████████████████████████████████████| 11/11 [00:00<00:00, 164.62it/s]
Random Forest TN, others FP
Calculating ceteris paribus: 100%|████████████████████████████████████████████████████| 11/11 [00:00<00:00, 162.20it/s]
Gradient Boosting TP, others FN
for row in range(16):
print(observations_info.iloc[row]["details"])
cp_bd_svm = explainer_svm.predict_profile(X_test.iloc[row,:])
cp_bd_svm.plot()
Calculating ceteris paribus: 100%|█████████████████████████████████████████████████████| 11/11 [00:00<00:00, 66.17it/s]
all TP #1
Calculating ceteris paribus: 100%|█████████████████████████████████████████████████████| 11/11 [00:00<00:00, 68.70it/s]
all TP #2
Calculating ceteris paribus: 100%|█████████████████████████████████████████████████████| 11/11 [00:00<00:00, 67.16it/s]
all TP #3
Calculating ceteris paribus: 100%|█████████████████████████████████████████████████████| 11/11 [00:00<00:00, 60.83it/s]
all TN #1
Calculating ceteris paribus: 55%|█████████████████████████████▍ | 6/11 [00:00<00:00, 57.82it/s]
all TN #2
Calculating ceteris paribus: 100%|█████████████████████████████████████████████████████| 11/11 [00:00<00:00, 58.98it/s]
Calculating ceteris paribus: 100%|█████████████████████████████████████████████████████| 11/11 [00:00<00:00, 74.48it/s]
all TN #3
Calculating ceteris paribus: 100%|█████████████████████████████████████████████████████| 11/11 [00:00<00:00, 68.30it/s]
all FN #1
Calculating ceteris paribus: 100%|█████████████████████████████████████████████████████| 11/11 [00:00<00:00, 64.76it/s]
all FN #2
Calculating ceteris paribus: 100%|█████████████████████████████████████████████████████| 11/11 [00:00<00:00, 72.09it/s]
all FP #1
Calculating ceteris paribus: 100%|█████████████████████████████████████████████████████| 11/11 [00:00<00:00, 68.53it/s]
all FP #2
Calculating ceteris paribus: 100%|█████████████████████████████████████████████████████| 11/11 [00:00<00:00, 69.48it/s]
XGBoost TP, others FN
Calculating ceteris paribus: 100%|█████████████████████████████████████████████████████| 11/11 [00:00<00:00, 71.00it/s]
XGBoost TN, others FP
Calculating ceteris paribus: 100%|█████████████████████████████████████████████████████| 11/11 [00:00<00:00, 64.64it/s]
SVM TP, others FN
Calculating ceteris paribus: 100%|█████████████████████████████████████████████████████| 11/11 [00:00<00:00, 72.56it/s]
SVM TN, others FP
Calculating ceteris paribus: 100%|█████████████████████████████████████████████████████| 11/11 [00:00<00:00, 75.29it/s]
Random Forest TN, others FP
Calculating ceteris paribus: 100%|█████████████████████████████████████████████████████| 11/11 [00:00<00:00, 66.61it/s]
Gradient Boosting TP, others FN
for row in range(16):
print(observations_info.iloc[row]["details"])
pp_cp_rfc = explainer_rfc.predict_profile(X_test.iloc[row,:])
pp_cp_rfc.plot()
Calculating ceteris paribus: 0%| | 0/11 [00:00<?, ?it/s]
all TP #1
Calculating ceteris paribus: 100%|█████████████████████████████████████████████████████| 11/11 [00:03<00:00, 3.47it/s]
Calculating ceteris paribus: 0%| | 0/11 [00:00<?, ?it/s]
all TP #2
Calculating ceteris paribus: 100%|█████████████████████████████████████████████████████| 11/11 [00:03<00:00, 2.98it/s]
Calculating ceteris paribus: 0%| | 0/11 [00:00<?, ?it/s]
all TP #3
Calculating ceteris paribus: 100%|█████████████████████████████████████████████████████| 11/11 [00:03<00:00, 3.53it/s]
Calculating ceteris paribus: 0%| | 0/11 [00:00<?, ?it/s]
all TN #1
Calculating ceteris paribus: 100%|█████████████████████████████████████████████████████| 11/11 [00:02<00:00, 4.42it/s]
Calculating ceteris paribus: 0%| | 0/11 [00:00<?, ?it/s]
all TN #2
Calculating ceteris paribus: 100%|█████████████████████████████████████████████████████| 11/11 [00:02<00:00, 4.18it/s]
Calculating ceteris paribus: 0%| | 0/11 [00:00<?, ?it/s]
all TN #3
Calculating ceteris paribus: 100%|█████████████████████████████████████████████████████| 11/11 [00:02<00:00, 4.21it/s]
Calculating ceteris paribus: 0%| | 0/11 [00:00<?, ?it/s]
all FN #1
Calculating ceteris paribus: 100%|█████████████████████████████████████████████████████| 11/11 [00:02<00:00, 3.70it/s]
Calculating ceteris paribus: 0%| | 0/11 [00:00<?, ?it/s]
all FN #2
Calculating ceteris paribus: 100%|█████████████████████████████████████████████████████| 11/11 [00:02<00:00, 4.17it/s]
Calculating ceteris paribus: 0%| | 0/11 [00:00<?, ?it/s]
all FP #1
Calculating ceteris paribus: 100%|█████████████████████████████████████████████████████| 11/11 [00:02<00:00, 4.10it/s]
Calculating ceteris paribus: 0%| | 0/11 [00:00<?, ?it/s]
all FP #2
Calculating ceteris paribus: 100%|█████████████████████████████████████████████████████| 11/11 [00:02<00:00, 4.15it/s]
Calculating ceteris paribus: 0%| | 0/11 [00:00<?, ?it/s]
XGBoost TP, others FN
Calculating ceteris paribus: 100%|█████████████████████████████████████████████████████| 11/11 [00:02<00:00, 4.28it/s]
Calculating ceteris paribus: 0%| | 0/11 [00:00<?, ?it/s]
XGBoost TN, others FP
Calculating ceteris paribus: 100%|█████████████████████████████████████████████████████| 11/11 [00:02<00:00, 4.01it/s]
Calculating ceteris paribus: 0%| | 0/11 [00:00<?, ?it/s]
SVM TP, others FN
Calculating ceteris paribus: 100%|█████████████████████████████████████████████████████| 11/11 [00:02<00:00, 4.42it/s]
Calculating ceteris paribus: 0%| | 0/11 [00:00<?, ?it/s]
SVM TN, others FP
Calculating ceteris paribus: 100%|█████████████████████████████████████████████████████| 11/11 [00:02<00:00, 4.41it/s]
Calculating ceteris paribus: 0%| | 0/11 [00:00<?, ?it/s]
Random Forest TN, others FP
Calculating ceteris paribus: 100%|█████████████████████████████████████████████████████| 11/11 [00:02<00:00, 4.24it/s]
Calculating ceteris paribus: 0%| | 0/11 [00:00<?, ?it/s]
Gradient Boosting TP, others FN
Calculating ceteris paribus: 100%|█████████████████████████████████████████████████████| 11/11 [00:02<00:00, 4.40it/s]
for row in range(16):
print(observations_info.iloc[row]["details"])
pp_cp_gbc = explainer_gbc.predict_profile(X_test.iloc[row,:])
pp_cp_gbc.plot()
Calculating ceteris paribus: 100%|████████████████████████████████████████████████████| 11/11 [00:00<00:00, 206.35it/s]
all TP #1
Calculating ceteris paribus: 100%|████████████████████████████████████████████████████| 11/11 [00:00<00:00, 136.27it/s]
all TP #2
Calculating ceteris paribus: 100%|█████████████████████████████████████████████████████| 11/11 [00:00<00:00, 86.88it/s]
all TP #3
Calculating ceteris paribus: 100%|████████████████████████████████████████████████████| 11/11 [00:00<00:00, 120.67it/s]
all TN #1
Calculating ceteris paribus: 100%|████████████████████████████████████████████████████| 11/11 [00:00<00:00, 134.27it/s]
all TN #2
Calculating ceteris paribus: 100%|████████████████████████████████████████████████████| 11/11 [00:00<00:00, 102.80it/s]
all TN #3
Calculating ceteris paribus: 100%|████████████████████████████████████████████████████| 11/11 [00:00<00:00, 142.23it/s]
all FN #1
Calculating ceteris paribus: 100%|████████████████████████████████████████████████████| 11/11 [00:00<00:00, 153.73it/s]
all FN #2
Calculating ceteris paribus: 100%|████████████████████████████████████████████████████| 11/11 [00:00<00:00, 159.65it/s]
all FP #1
Calculating ceteris paribus: 100%|████████████████████████████████████████████████████| 11/11 [00:00<00:00, 151.59it/s]
all FP #2
Calculating ceteris paribus: 100%|████████████████████████████████████████████████████| 11/11 [00:00<00:00, 147.65it/s]
XGBoost TP, others FN
Calculating ceteris paribus: 100%|████████████████████████████████████████████████████| 11/11 [00:00<00:00, 178.94it/s]
XGBoost TN, others FP
Calculating ceteris paribus: 100%|████████████████████████████████████████████████████| 11/11 [00:00<00:00, 155.58it/s]
SVM TP, others FN
Calculating ceteris paribus: 100%|████████████████████████████████████████████████████| 11/11 [00:00<00:00, 180.07it/s]
SVM TN, others FP
Calculating ceteris paribus: 100%|████████████████████████████████████████████████████| 11/11 [00:00<00:00, 198.80it/s]
Random Forest TN, others FP
Calculating ceteris paribus: 100%|████████████████████████████████████████████████████| 11/11 [00:00<00:00, 208.47it/s]
Gradient Boosting TP, others FN